home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 52 / Amiga Format AFCD52 (Issue 136, May 2000).iso / -serious- / programming / other / autocat / autocat.rexx < prev    next >
OS/2 REXX Batch file  |  2000-02-28  |  8KB  |  4 lines

  1. /*
  2.    $VER: AutoCat 1.1 (15.02.2000) Copyright (c) Hervé Dupont.
  3. */
  4. ;Parse ARG nom1 nom2 opt;numver="1.1";datever="(15-Feb.-2000)";Caty="autocat.catalog";Version_Str="x.y";CALL ActiveLangage();IF nom1="?" THEN;do;SAY "AutoCat V" numver datever "© Hervé Dupont."'0A'X;SAY LocaleStr(MSG_file_info1) '0a'X;SAY LocaleStr(MSG_file_info1b);SAY LocaleStr(MSG_file_info2);SAY LocaleStr(MSG_file_info3);SAY LocaleStr(MSG_file_info4);SAY "";CALL Fin();END;IF ~EXISTS(nom1)|nom1="" THEN;do;str=LocaleStr(MSG_file_err3);IF nom1="" THEN say "==>" LocaleStr(MSG_file_err1) '0a'X"==>" LocaleStr(MSG_file_err2);ELSE SAY "==>" left(str,POS('%s',str)-1)||nom1||delstr(str,1,POS('%s',str)+1);CALL Fin();END;IF left(nom2,1)="-" THEN;do;opt=nom2;nom2="";END;nom2=strip(nom2);IF nom2="" THEN nom2=nom1||'.cd';IF right(nom2,3)~=".cd" THEN nom2=nom2||'.cd';IF POS("E",upper(opt))>0|POS("-E1",upper(opt))>0|POS("-E",upper(opt))>0 THEN Erreur_Stat=1;ELSE Erreur_Stat=0;IF POS("W0",upper(opt))>0|POS("-W0",upper(opt))>0 THEN Ecriture_Stat=0;ELSE Ecriture_Stat=1;IF POS("#",upper(opt))>0|POS("-#",upper(opt))>0 THEN Numerote_Stat=0;ELSE Numerote_Stat=1;count1=0;count2=0;warn1=0;Erreur=0;nligne=0;open('fic1',nom1,'R');do while ~eof('fic1');ligne=readln('fic1');parse var ligne part1 . . .;ligne=strip(ligne);nligne=nligne+1;IF upper(Left(strip(part1),3))="MSG" THEN call Decompose();IF upper(Left(strip(part1),8))="STRINGS." THEN call chaines();IF POS('$VER_STRINGS:',upper(ligne))>0 THEN;do;Version_Str=WORD(ligne,FIND(upper(ligne),'$VER_STRINGS:')+1);END;END;close('fic1');IF count1 ~=count2 THEN;do;erreur=erreur+1;str=LocaleStr(MSG_chn_twice);str=left(str,POS('%n',str)-1)||count1||delstr(str,1,POS('%n',str)+1);SAY 'a'X||"==>" left(str,POS('%n',str)-1)||count2||delstr(str,1,POS('%n',str)+1);str=LocaleStr(MSG_chn_twice2);str=left(str,POS('%s',str)-1)||nom2||delstr(str,1,POS('%s',str)+1);SAY "==>" left(str,POS('%n',str)-1)||ABS(count1-count2)||delstr(str,1,POS('%n',str)+1);IF count1>count2 THEN SAY "==>" LocaleStr(MSG_twice3);END;IF count1>0&Ecriture_Stat=1 THEN call ecritCD();str=LocaleStr(MSG_num_chn);SAY '0A'X||"==>" left(str,POS('%n',str)-1)||count1||delstr(str,1,POS('%n',str)+1);str=LocaleStr(MSG_num_warn);IF warn1>0 THEN SAY "==>" left(str,POS('%n',str)-1)||warn1||delstr(str,1,POS('%n',str)+1);str=LocaleStr(MSG_num_err);IF Erreur>0 THEN SAY "==>" left(str,POS('%n',str)-1)||erreur||delstr(str,1,POS('%n',str)+1);SAY "";CALL Fin();Decompose:;part=ligne;pos_rem1=POS("/*",part);lch=LENGTH(part);IF pos_rem1>0 THEN;do;Part_A=compress(LEFT(part,pos_rem1-1));part_C=right(part,lch-pos_rem1-1);Pos_rem2=POS("*/",part_C);IF Pos_Rem2>0 THEN part_C=strip(left(part_C,pos_rem2-1));str=LocaleStr(MSG_Comment);str=left(str,POS('%n',str)-1)||nligne||delstr(str,1,POS('%n',str)+1);say str '"' part_c '"';END;ELSE Part_A=COMPRESS(part);posit=POS("=",part_A);lch=LENGTH(part_A);IF posit>0&posit<lch THEN;do;count1=count1+1;chtp1=left(part_A,posit-1);numtp1=right(part_A,lch-posit);IF ch1.numtp1 ~="CH1."||numtp1 THEN;do;str=LocaleStr(MSG_Err_Lbl_Twice);SAY '0a'X||"==>" left(str,POS('%n',str)-1)||numtp1||delstr(str,1,POS('%n',str)+1);str=LocaleStr(MSG_err_str1);str=left(str,POS('%s',str)-1)||ch1.numtp1||delstr(str,1,POS('%s',str)+1);SAY "-->" left(str,POS('%s',str)-1)||chtp1||delstr(str,1,POS('%s',str)+1);erreur=erreur+1;IF Erreur_stat=0 THEN;do;CLOSE('fic1');CALL Fin();END;END;IF Numerote_Stat=1 THEN ch1.numtp1=chtp1 "("||numtp1||"//)";ELSE ch1.numtp1=chtp1 "(//)";numch.count1=numtp1;END;ELSE warn1=warn1+1;DROP chtp1 numtp1;RETURN;Chaines:;part=ligne;pos_rem1=POS("/*",part);lch=LENGTH(part);IF pos_rem1 ~=0 THEN;do;Part_A=LEFT(part,pos_rem1-1);part_C=right(part,lch-pos_rem1-1);Pos_rem2=POS("*/",part_C);IF Pos_Rem2>0 THEN part_C=left(part_C,pos_rem2-1);say LocaleStr(MSG_Comment) part_c "("||LocaleStr(MSG_Ligne) nligne||")";END;ELSE Part_A=part;part_A=DELSTR(part_A,1,8);posit=POS("=",part_A);lch=LENGTH(part_A);NUMERO=strip(left(part_A,POSIT-1));IF ch2.numero ~="CH2."||numero THEN;do;str=LocaleStr(MSG_err_num);SAY '0a'X||"==>" left(str,POS('%n',str)-1)||numero||delstr(str,1,POS('%n',str)+1);str=LocaleStr(MSG_err_str1);str=left(str,POS('%s',str)-1)||ch2.numero||delstr(str,1,POS('%s',str)+1);SAY "-->" left(str,POS('%s',str)-1)||strip(right(part_A,lch-posit))||delstr(str,1,POS('%s',str)+1);erreur=erreur+1;IF Erreur_stat=0 THEN;do;CLOSE('fic1');CALL Fin();END;END;ch2.numero=strip(strip(right(part_A,lch-posit)),'B','"');count2=count2+1;DROP numero;RETURN;EcritCD:;tete1="; --  `.cd' created by AutoCat V" numver "(c) <Seahorse@nordnet.fr>  --";tete2="; --  From description file version : "||Version_Str;tete3="; --  Translated by : ...";open('fic2',nom2,'W');str=LocaleStr(MSG_write);str=left(str,POS('%s',str)-1)||nom2||delstr(str,1,POS('%s',str)+1);SAY 'a'X||"==>" str;i=0;WriteLN('fic2',";");WriteLN('fic2',tete1);WriteLN('fic2',";");WriteLN('fic2',tete2);WriteLN('fic2',tete3);WriteLN('fic2',";");WriteLN('fic2',";");Do while i<count1;i=i+1;j=numch.i;WriteLN('fic2',ch1.j);WriteLN('fic2',ch2.j);WriteLN('fic2',";");END;close('fic2');RETURN;Verif:;LibOk=0;IF EXISTS('LIBS:rexxreqtools.library') THEN;do;IF ~SHOW('LIBRARIES','rexxreqtools.library') THEN;do;IF ADDLIB('rexxreqtools.library',10,-30,0) THEN LibOk=1;END;END;RETURN;ActiveLangage:;PARSE SOURCE . . . progdir .;IF UPPER(progdir)="RAM" THEN progdir="Ram:";booll=LENGTH(progdir);booli=LASTPOS(":",progdir);boolh=LASTPOS("/",progdir);IF boolh>booli THEN progdir=SUBSTR(progdir,1,boolh-1);IF boolh==0 THEN progdir=SUBSTR(progdir,1,booli);IF RIGHT(progdir,1) ~=':' THEN progdir2=progdir||'/';ELSE progdir2=progdir;CALL PRAGMA('D',progdir);CALL InitLangage();IF ~SHOW('LIBRARIES','locale.library') THEN;CALL ADDLIB('locale.library',0,-30,0);IF SHOW('LIBRARIES','locale.library') THEN;DO;id='req'pragma('id');address command 'rxset' id '`echo $language`';language=getclip(id);call setclip(id,'');IF language ~='' THEN;DO;catalog=OPENCATALOG(progdir2'catalogs/'language'/'||caty,'english',0);IF catalog=0 THEN;catalog=OPENCATALOG(progdir2||caty,'english',0);END;IF catalog=0 THEN;catalog=OPENCATALOG(caty,'english',0);END;RETURN;LocaleStr:;PARSE ARG stringnumber;IF catalog ~=0 THEN;RETURN(GETCATALOGSTR(catalog,stringnumber,strings.stringnumber));ELSE;RETURN(strings.stringnumber);InitLangage:;MSG_file_info1=0;MSG_file_info1b=1;MSG_file_info2=2;MSG_file_info3=3;MSG_file_info4=4;MSG_file_info5=5;MSG_file_info6=6;MSG_file_err1=7;MSG_file_err2=8;MSG_file_err3=9;MSG_chn_twice=10;MSG_chn_twice2=11;MSG_twice3=12;MSG_num_chn=13;MSG_num_warn=14;MSG_num_err=15;MSG_err_num=16;MSG_Err_Lbl_Twice=17;MSG_err_str1=18;MSG_write=19;MSG_Comment=20;strings.0="Syntax: AutoCat Source [Destination[.cd]] [-e][-w0][-#]";strings.1="       (Options must be stick! Eg: -e-w0)";strings.2=" -e  : Show errors instead of to stop prog. Disable by default.";strings.3=" -w0 : Disable the writing of the description file. Test mode.";strings.4=" -#  : Don't give a number to labels (#//). Source order.";strings.5="Dummy1";strings.6="Dummy2";strings.7="I need a filename to manage!";strings.8="Use '?' option to see more infos.";strings.9="File '%s' not found!";strings.10="ATTENTION: there are %n labels for %n strings found!";strings.11="         : destination file '%s' will come with %n error(s).";strings.12="         : possible strings to find in file: « CH2.x » (x=num).";strings.13="Processed %n index strings.";strings.14="%n warnings met.";strings.15="%n error(s) found!";strings.16="ERROR! String number '%n' is already used.";strings.17="ERROR! Two labels point to a same string number: '%n'";strings.18="« %s » and « %s »";strings.19="Writing description file '%s'...";strings.20="Comment (line °%n)=";RETURN;Fin:;IF SHOW('LIBRARIES','locale.library') THEN;do;CALL CLOSECATALOG(catalog);remlib('locale.library');END;IF SHOW('LIBRARIES','rexxreqtools.library') THEN remlib('rexxreqtools.library');EXIT;RETURN